// f(x)=x²+2x-2
.data
num: .long 0
i: .long 0
ergebnis: .long 0,0,0,0,0,0,0,0,0,0
durchschnitt: .long 0
str: .string "%d"

.text
.globl main
main:
movl $0, %edi // Arrayzeiger auf Null

.read:
pushl $num
pushl $str

// Zahlen einlesen
call scanf

addl $8, %esp

// Berechnung
movl num, %eax
pushl %eax
subl $4, %esp // für Rückgabewert

call fx // Brechnung

popl %eax //Rückgabewert
addl $4, %esp

// Zählervariable auslesen
movl i, %ecx

movl %eax, ergebnis(, %ecx, 4)

incl %ecx
movl %ecx, i // Zählervariable sichern
cmpl $9, %ecx // 10 wdh
jle .read


// Durchschnitt berechnen
movl $0, i
movl $0, %eax
.durchschnitt:

movl i, %ecx

addl ergebnis(, %ecx, 4), %eax

incl %ecx
movl %ecx, i // Zählervariable sichern
cmpl $9, %ecx // 10 wdh
jle .durchschnitt

movl $10, %ebx
cltd
idivl %ebx

// Durschnitt ausgeben
pushl %eax
pushl $str

call printf

addl $8, %esp

// Berechnung
// f(x)=x²+2x-2
.globl fx
fx:
pushl %ebp
movl %esp, %ebp

// Eingabe aus dem Stack holen
movl 12(%ebp), %eax

// x²
cltd
imull %eax
pushl %eax

// 2x
movl 12(%ebp), %eax
movl $2, %ecx
cltd
imull %ecx

// x²+2
popl %ecx
addl %ecx, %eax

// x²+2x-2
subl $2, %eax

// Rückgabe
movl %eax, 8(%ebp)
popl %ebp
ret
